package unq_ui.tp_robots_web_wicket;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import robots.excepcions.DineroInsuficienteException;
import robots.excepcions.PorcentajeReparacionInvalidoException;
import robots.models.JugadorAppModel;
import robots.models.RepararRobotAppModel;
import unq_ui.tp_robots_web_wicket.tools.BotonVolver;


public class RepararPage extends WebPage {
	
	private static final long serialVersionUID = 5139692156134643045L;
	private CompoundPropertyModel<RepararRobotAppModel> reparacionCompoundPropertyModel;
	final private RepararRobotAppModel repararAppModel;
	final private JugadorAppModel modelAnterior;
	final private Idioma idioma;
	final private FeedbackPanel feedback = new FeedbackPanel("feedback");
	
	public RepararPage(RepararRobotAppModel repararModel, JugadorAppModel jugadorModel, Idioma idioma) {
		this.repararAppModel =repararModel;
		this.modelAnterior= jugadorModel;
		this.idioma= idioma;
		
		this.reparacionCompoundPropertyModel= new CompoundPropertyModel<RepararRobotAppModel>(repararModel);
		
		final Form<RepararRobotAppModel> formReparacion = new Form<RepararRobotAppModel>("formReparar", this.reparacionCompoundPropertyModel);
		
		this.agregarLabels(formReparacion);
		this.agregarTextField(formReparacion);
		this.agregarBotones(formReparacion);
		feedback.setOutputMarkupId(true);
		formReparacion.add(feedback);
		this.add(formReparacion);
		
		agregarTextosIdiomaEnFormulario(formReparacion);
	}
	
	private void agregarTextosIdiomaEnFormulario(
			Form<RepararRobotAppModel> formReparacion) {
		formReparacion.add(new Label("repararA",idioma.repararA_6));
		formReparacion.add(new Label("deterioro",idioma.deterioro_6));
		formReparacion.add(new Label("danioARep",idioma.danioAReparar_6));
		formReparacion.add(new Label("costo",idioma.costo_6));
		
		add(new Label("reparaTuRobot",idioma.reparaTuRobot_6));
		formReparacion.add(new Label("textoCalcular",idioma.calcular_6));
		formReparacion.add(new Label("textoReparar",idioma.reparar_6));
		formReparacion.add(new Label("textoVolver",idioma.volver_6));
		
	}

	//FIXME usar los labels con el id y los gets que esten en el modelo!
	public void agregarLabels(Form<RepararRobotAppModel> form){
		form.add(new Label("nombreRobot"));
		form.add(new Label("danio"));		
		form.add((new Label("costoDeReparacion")).setOutputMarkupId(true));
		add(new Label("nombreJugador",this.modelAnterior.getJugador().getNombre()));
		add(new Label("dineroJugador",this.modelAnterior.getJugador().getDinero().toString()));
	}
	
	public void agregarTextField(Form<RepararRobotAppModel> form){
		form.add(new TextField<Integer>("danioAReparar"));
	}
	
	public void agregarBotones(Form<RepararRobotAppModel> form){
		form.add(new AjaxButton("calcular") {
			private static final long serialVersionUID = 3880313330143492831L;
			protected void onSubmit(AjaxRequestTarget target, Form<?> form){
				if (repararAppModel.getDanioAReparar() <=0)
					target.appendJavaScript("alert('" + idioma.porcentajeDanioInvalido_6 +  "');");
				target.add(form);
			}
		});
		form.add(new AjaxButton("aceptar") {
			private static final long serialVersionUID = 3880313330143492831L;
			protected void onSubmit(AjaxRequestTarget target, Form<?> form){
				try {
					if (repararAppModel.getDanio() < repararAppModel.getDanioAReparar())
						target.appendJavaScript("alert('" + idioma.noPuedesReparar_6 +  "');");
					else {
						repararAppModel.reparar();
						modelAnterior.setCompraVentaReparacionMejoraRespuest(idioma.fraseReparacion_6 + repararAppModel.getNombreRobot());
						this.setResponsePage(new MainPage(modelAnterior,idioma));
					}	
				} catch (DineroInsuficienteException e) {
					error(idioma.dineroInsuficiente_6);
					target.add(feedback);
				} catch (PorcentajeReparacionInvalidoException e) {
					error(idioma.porcentajeDanioInvalido_6);
					target.add(feedback);
				}
			}
		});
		
		new BotonVolver("cancelar", form, new MainPage(modelAnterior,idioma));
	}	

}



